home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 127 / PC Guia 127.iso / Software / Produtividade / OpenOffice.org 2.0.1 / openofficeorg1.cab / UCB.xba < prev    next >
Extensible Markup Language  |  2005-09-30  |  10KB  |  293 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3. <script:module xmlns:script="http://openoffice.org/2000/script" script:name="UCB" script:language="StarBasic">'Option explicit
  4. Public oDocument
  5. Dim oDocInfo as object
  6. Const SBMAXDIRCOUNT = 10
  7. Dim CurDirMaxCount as Integer
  8. Dim sDirArray(SBMAXDIRCOUNT-1) as String
  9. Dim DirIndex As Integer
  10. Dim iDirCount as Integer
  11. Dim bInterruptSearch as Boolean
  12.  
  13. Sub Main()
  14. Dim LocsfileContent(0) as String
  15.     LocsfileContent(0) = "*"
  16.     ReadDirectories("file:///space", LocsfileContent(), True, False, false)
  17. End Sub
  18.  
  19. '        ReadDirectories(      sSourceDir,          bRecursive,          bCheckRealType, False, sFileContent(), sLocExtension)
  20.  
  21. Function ReadDirectories(ByVal AnchorDir As String, bRecursive as Boolean,  bcheckFileType as Boolean, bGetByTitle as Boolean, Optional sFileContent(), Optional sExtension as String)
  22. Dim i as integer
  23. Dim Status as Object
  24. Dim FileCountinDir as Integer
  25. Dim RealFileContent as String
  26. Dim FileName as string
  27. Dim oUcbObject as Object
  28. Dim DirContent()
  29. Dim CurIndex as Integer
  30. Dim MaxIndex as Integer
  31. Dim StartUbound as Integer
  32. Dim FileExtension as String
  33.     StartUbound = 5
  34.     MaxIndex = StartUBound
  35.     CurDirMaxCount = SBMAXDIRCOUNT
  36. Dim sFileArray(StartUbound,1) as String
  37.     On Local Error Goto FILESYSTEMPROBLEM:
  38.     CurIndex = -1
  39.     ' Todo: Is the last separator valid?
  40.     DirIndex = 0
  41.     sDirArray(iDirIndex) = AnchorDir
  42.     iDirCount = 1
  43.     oDocInfo = CreateUnoService("com.sun.star.document.DocumentProperties")
  44.     oUcbObject = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  45.     If oUcbObject.Exists(AnchorDir) Then
  46.         Do
  47.             AnchorDir = sDirArray(DirIndex)
  48.             On Local Error Resume Next
  49.             DirContent() = oUcbObject.GetFolderContents(AnchorDir,True)
  50.             DirIndex = DirIndex + 1
  51.             On Local Error Goto 0
  52.             On Local Error Goto FILESYSTEMPROBLEM:
  53.             If Ubound(DirContent()) <> -1 Then
  54.                 FileCountinDir = Ubound(DirContent())+ 1
  55.                 For i = 0 to FilecountinDir -1
  56.                     If bInterruptSearch = True Then
  57.                         Exit Do
  58.                     End If
  59.                     
  60.                     Filename = DirContent(i)
  61.                     If oUcbObject.IsFolder(FileName) Then
  62.                         If brecursive Then
  63.                             AddFoldertoList(FileName, DirIndex)
  64.                         End If
  65.                     Else
  66.                         If bcheckFileType Then
  67.                             RealFileContent  = GetRealFileContent(oDocInfo, FileName)
  68.                         Else
  69.                             RealFileContent = GetFileNameExtension(FileName)
  70.                         End If
  71.                         If RealFileContent <> "" Then
  72.                             ' Retrieve the Index in the Array, where a Filename is positioned
  73.                             If Not IsMissing(sFileContent()) Then
  74.                                 If (FieldinArray(sFileContent(), Ubound(sFileContent), RealFileContent)) Then
  75.                                     ' The extension of the current file passes the filter and is therefor admitted to the
  76.                                     ' fileList
  77.                                     If Not IsMissing(sExtension) Then
  78.                                         If sExtension <> "" Then
  79.                                             ' Consider that some Formats like old StarOffice Templates with the extension ".vor" can only be
  80.                                             ' precisely identified by their mimetype and their extension
  81.                                             FileExtension = GetFileNameExtension(FileName)
  82.                                             If FileExtension = sExtension Then
  83.                                                 AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
  84.                                             End If
  85.                                         Else
  86.                                             AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
  87.                                         End If
  88.                                     Else
  89.                                         AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
  90.                                     End If
  91.                                 End If
  92.                             Else
  93.                                 AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex)
  94.                             End If
  95.                             If CurIndex = MaxIndex Then
  96.                                 MaxIndex = MaxIndex + StartUbound
  97.                                 ReDim Preserve sFileArray(MaxIndex,1) as String
  98.                             End If
  99.                         End If
  100.                     End If
  101.                 Next i
  102.             End If
  103.         Loop Until DirIndex >= iDirCount
  104.         If CurIndex > -1 Then
  105.             ReDim Preserve sFileArray(CurIndex,1) as String
  106.         Else
  107.             ReDim sFileArray() as String
  108.         End If
  109.     Else
  110.         Msgbox("Directory '" & ConvertFromUrl(AnchorDir) & "' does not exist!", 16, GetProductName())
  111.     End If
  112.     ReadDirectories() = sFileArray()
  113.     Exit Function
  114.  
  115.     FILESYSTEMPROBLEM:
  116.     Msgbox("Sorry, Filesystem Problem")
  117.     ReadDirectories() = sFileArray()
  118.     Resume LEAVEPROC
  119.     LEAVEPROC:
  120. End Function
  121.  
  122.  
  123. Sub AddFoldertoList(sDirURL as String, iDirIndex)
  124.     iDirCount = iDirCount + 1
  125.     If iDirCount = CurDirMaxCount Then
  126.         CurDirMaxCount = CurDirMaxCount + SBMAXDIRCOUNT
  127.         ReDim Preserve sDirArray(CurDirMaxCount) as String
  128.     End If
  129.     sDirArray(iDirCount-1) = sDirURL
  130. End Sub
  131.  
  132.  
  133. Sub AddFileNameToList(sFileArray(), FileName as String, FileContent as String, bGetByTitle as Boolean, CurIndex)
  134. Dim FileCount As Integer
  135.     CurIndex = CurIndex + 1
  136.     sFileArray(CurIndex,0) = FileName
  137.     If bGetByTitle Then
  138.         sFileArray(CurIndex,1) = RetrieveDocTitle(oDocInfo, FileName)
  139.         ' Add the documenttitles to the Filearray
  140.     Else
  141.         sFileArray(CurIndex,1) = FileContent
  142.     End If
  143. End Sub
  144.  
  145.  
  146. Function RetrieveDocTitle(oDocInfo as Object, sFileName as String) As String
  147. Dim sDocTitle as String
  148.     On Local Error Goto NOFILE
  149.     oDocInfo.Read(sFileName)
  150.     sDocTitle = oDocInfo.Title
  151.     NOFILE:
  152.     If Err <> 0 Then
  153.         GetRealFileContent = ""
  154.         RESUME CLR_ERROR
  155.     End If
  156.     CLR_ERROR:
  157.     If sDocTitle = "" Then
  158.         sDocTitle = GetFileNameWithoutExtension(sFilename, "/")
  159.     End If
  160.     RetrieveDocTitle = sDocTitle
  161. End Function
  162.  
  163.  
  164. ' Retrieves The Filecontent of a Document by extracting the content
  165. ' from the Header of the document
  166. Function GetRealFileContent(oDocInfo as Object, FileName as String) As String
  167.     On Local Error Goto NOFILE
  168.     oDocInfo.Read(FileName)
  169.     GetRealFileContent = oDocInfo.MIMEType
  170.     NOFILE:
  171.     If Err <> 0 Then
  172.         GetRealFileContent = ""
  173.         resume CLR_ERROR
  174.     End If
  175.     CLR_ERROR:
  176. End Function
  177.  
  178.  
  179. Function CopyRecursively(SourceFilePath as String, SourceStemDir as String, TargetStemDir as String)
  180. Dim TargetDir as String
  181. Dim TargetFile as String
  182.  
  183.     TargetFile= ReplaceString(SourceFilePath, TargetStemDir, SourceStemDir)
  184.     TargetFileName = FileNameoutofPath(TargetFile,"/")
  185.     TargetDir = DeleteStr(TargetFile, TargetFileName)
  186.     CreateFolder(TargetDir)
  187.     CopyRecursively() = TargetFile
  188. End Function
  189.  
  190.  
  191. ' Opens a help url referenced by a Help ID that is retrieved from the calling button tag
  192. Sub ShowHelperDialog(aEvent)
  193. Dim oSystemNode as Object
  194. Dim sSystem as String
  195. Dim oLanguageNode as Object
  196. Dim sLocale as String
  197. Dim sLocaleList() as String
  198. Dim sLanguage as String
  199. Dim sHelpUrl as String
  200. Dim sDocType as String
  201.     HelpID = aEvent.Source.Model.Tag
  202.     oLocDocument = StarDesktop.ActiveFrame.Controller.Model
  203.     sDocType = GetDocumentType(oLocDocument)
  204.     oSystemNode = GetRegistryKeyContent("org.openoffice.Office.Common/Help")
  205.     sSystem = oSystemNode.GetByName("System")
  206.     oLanguageNode = GetRegistryKeyContent("org.openoffice.Setup/L10N/")
  207.     sLocale = oLanguageNode.getByName("ooLocale")
  208.     sLocaleList() = ArrayoutofString(sLocale, "-")
  209.     sLanguage = sLocaleList(0)
  210.     sHelpUrl = "vnd.sun.star.help://" & sDocType & "/" & HelpID & "?Language=" & sLanguage & "&System=" & sSystem
  211.     StarDesktop.LoadComponentfromUrl(sHelpUrl, "OFFICE_HELP", 63, NoArgs())
  212. End Sub
  213.  
  214.  
  215. Sub SaveDataToFile(FilePath as String, DataList())
  216. Dim FileChannel as Integer
  217. Dim i as Integer
  218. Dim oFile as Object
  219. Dim oOutputStream as Object
  220. Dim oStreamString as Object
  221. Dim oUcb as Object
  222. Dim sCRLF as String
  223.  
  224.     sCRLF = CHR(13) & CHR(10)
  225.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  226.     oOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
  227.     If oUcb.Exists(FilePath) Then
  228.         oUcb.Kill(FilePath)
  229.     End If
  230.     oFile = oUcb.OpenFileReadWrite(FilePath)
  231.     oOutputStream.SetOutputStream(oFile.GetOutputStream)
  232.     For i = 0 To Ubound(DataList())
  233.         oOutputStream.WriteString(DataList(i) & sCRLF)
  234.     Next i
  235.     oOutputStream.CloseOutput()
  236. End Sub
  237.  
  238.  
  239. Function LoadDataFromFile(FilePath as String, DataList()) as Boolean
  240. Dim oInputStream as Object
  241. Dim i as Integer
  242. Dim oUcb as Object
  243. Dim oFile as Object
  244. Dim MaxIndex as Integer
  245.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  246.     If oUcb.Exists(FilePath) Then
  247.         MaxIndex = 10
  248.         oInputStream = createUnoService("com.sun.star.io.TextInputStream")
  249.         oFile = oUcb.OpenFileReadWrite(FilePath)
  250.         oInputStream.SetInputStream(oFile.GetInputStream)
  251.         i = -1
  252.         Redim Preserve DataList(MaxIndex)
  253.         While Not oInputStream.IsEOF
  254.             i = i + 1
  255.             If i > MaxIndex Then
  256.                 MaxIndex = MaxIndex + 10
  257.                 Redim Preserve DataList(MaxIndex)
  258.             End If
  259.             DataList(i) = oInputStream.ReadLine
  260.         Wend
  261.         If i > -1 And i <> MaxIndex Then
  262.             Redim Preserve DataList(i)
  263.         End If
  264.         LoadDataFromFile() = True
  265.         oInputStream.CloseInput()
  266.     Else
  267.         LoadDataFromFile() = False
  268.     End If
  269. End Function
  270.  
  271.  
  272. Function CreateFolder(sNewFolder) as Boolean
  273. Dim oUcb as Object
  274.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  275.     On Local Error Goto NOSPACEONDRIVE
  276.     If Not oUcb.Exists(sNewFolder) Then
  277.         oUcb.CreateFolder(sNewFolder)
  278.     End If
  279.     CreateFolder = True
  280. NOSPACEONDRIVE:
  281.     If Err <> 0 Then
  282.         If InitResources("", "dbw") Then
  283.             ErrMsg = GetResText(500)
  284.             ErrMsg = ReplaceString(ErrMsg, chr(13), "<BR>")
  285.             ErrMsg = ReplaceString(ErrMsg, sNewFolder, "%1")
  286.             Msgbox(ErrMsg, 48, GetProductName())
  287.         End If
  288.         CreateFolder = False
  289.         Resume GOON
  290.     End If
  291. GOON:
  292. End Function
  293. </script:module>